Properties
title: Security, Privacy, and Compliance aliases: [Security Audit, FERPA COPPA] tags: [3netra/wiki, security, privacy, compliance] product: 3netra Meta Android App source_repository: 3Netra-ai/3n_meta_android source_ref: origin/prod source_revision: b48aada8fd5427b5db0c02945569963c4ae543c8 last_verified: 2026-08-06 up: "[[Home]]"
Security, Privacy, and Compliance
Data classification
| Data | Sensitivity | Current handling | Required control |
|---|---|---|---|
| Account/session tokens | High | Supabase client session | Secure SDK storage, revocation, short-lived tokens |
| Student profile and academic level | High | Supabase plus local preferences | Student consent, least privilege, deletion |
| Camera images/video | Very high | Encoded and sent to backend for assistance | Notice, minimization, no implicit retention |
| Voice/audio/transcripts | Very high | Android/Sarvam/backend paths | Vendor disclosure and retention policy |
| Face embeddings | Biometric/critical | CSV in Supabase active flow | Explicit consent, encryption, RLS, deletion, audit |
| Classmate/instructor identity | High | Supabase face records | Enrollment authority and subject rights |
| Emergency/location data | Critical | Incomplete flow | Accuracy, availability, escalation, retention |
| Activity/session history | High | Memory and Supabase concepts | Purpose limitation and role-based access |
Trust boundaries
flowchart LR
Student[Student/user] -->|consent and actions| Device[Android trust boundary]
Device -->|public client credentials| Supabase[Supabase trust boundary]
Device -->|media and prompts| Edge[Supabase Edge Function trust boundary]
Backend --> Model[AI vendor trust boundary]
Device --> Sarvam[Sarvam trust boundary]
Staff[Faculty/Disability Specialist] -->|enrollment authority| Device
Verified controls
- Supabase manages authentication instead of a custom password store.
- Teacher/Admin PIN values are BCrypt-hashed before local storage.
- An AES-backed encrypted local face-storage utility includes a 90-day retention concept, but no active call site uses it.
- The Android app invokes a Supabase Edge Function for AI. Its returned model text is discarded in the current client; this is not evidence of a secure or working AI boundary.
- Runtime permission rationale screens explain camera, microphone, location, Bluetooth, and notifications.
Critical gaps
- Biometric path mismatch: active face enrollment stores CSV embeddings in Supabase; the encrypted local store is unused.
- No repository proof of RLS: schemas, migrations, policies, grants, and RLS tests were not found in the reviewed app. Client checks are not authorization.
- Consent not operational: a default-false consent field and fabricated age do not constitute student/guardian verification.
- Misleading privacy copy risk: UI claims about on-device recognition or FERPA compliance exceed verified controls.
- Face model fail-open: model-load failure can yield random embeddings rather than disabling recognition.
- Sensitive logging: device/session identifiers, similarity values, and embedding samples may enter Android logs.
- Client configuration: API values compiled into the app are extractable. Only public/publishable values belong there.
- Signing assets: a release keystore is tracked in the secondary Android project; release signing ownership and secret handling need remediation.
- Emergency reliability: incomplete GPS/wiring makes the SOS capability unsafe to represent as operational.
- Credential exposure and server boundary: secret-like configuration is compiled into the app or committed as fallback source configuration; the AWS prototype also contains a provider-authorization implementation. Do not reproduce values in docs; rotate/revoke exposed material and move all provider secrets to managed server/Edge-function secret stores.
- Undemonstrated retention: active face records are cloud rows; no repository code invokes the local 90-day cleanup, and the SAM bucket has no lifecycle configuration.
Supabase security requirements
- Enable RLS on every table exposed through the Data API.
- Use ownership/relationship predicates;
TO authenticatedalone is not object-level authorization. - Give update policies both
USINGandWITH CHECK, and ensure required select policies exist. - Keep authorization roles in app metadata or relational tables, never user-editable metadata.
- Never ship a
service_roleor secret key in the Android app. - Confirm whether tables are exposed to Data API roles; exposure grants and RLS solve different problems.
- Test student, instructor, and unauthorized cross-tenant access as separate identities.
Minimum biometric lifecycle
stateDiagram-v2
[*] --> Notice
Notice --> StudentConsent: student approves
StudentConsent --> Enroll: named subject and purpose recorded
Enroll --> Active: encrypted embedding stored
Active --> Accessed: recognition request authorized
Accessed --> Active: audited
Active --> Deleted: withdrawal, retention expiry, account deletion
StudentConsent --> Denied: declined
Denied --> [*]
Deleted --> [*]
Compliance interpretation
FERPA and India's DPDPA are product/legal obligations, not SDK features. Current documents express alignment goals, but the repository does not prove compliance. Before production use with students, obtain legal review and produce:
- authoritative age/audience policy;
- student consent and revocation workflow;
- biometric consent and retention policy;
- role and institution-tenant authorization matrix;
- RLS schema and automated policy tests;
- vendor/subprocessor and cross-border data inventory;
- deletion/export workflow and audit evidence;
- incident response and child-safety review.
Tip
Navigation ⬅️ 10-Engineering-Ops · 🏠 Home · ➡️ 12-Risks-Decisions
